import { watch } from 'vue';

import { usePreferences } from '@vben/preferences';

import VxeUIPluginRenderElement from '@vxe-ui/plugin-render-element';
import {
  ElCascader,
  ElDatePicker,
  ElInput,
  ElInputNumber,
  ElSelect,
  ElSwitch,
  ElTimeSelect,
} from 'element-plus';
import {
  VxeButton,
  VxeCheckbox,
  VxeIcon,
  VxeInput,
  VxeLoading,
  VxeModal,
  VxeNumberInput,
  VxePager,
  VxeRadioGroup,
  VxeSelect,
  VxeTooltip,
  VxeUI,
  VxeUpload,
} from 'vxe-pc-ui';
import enUS from 'vxe-pc-ui/lib/language/en-US';
import {
  VxeColgroup,
  VxeColumn,
  VxeGrid,
  VxeTable,
  VxeToolbar,
} from 'vxe-table';

// 先导入样式，确保样式优先级
import 'vxe-pc-ui/styles/cssvar.scss';
import 'vxe-table/styles/cssvar.scss';
// 导入默认的语言
import zhCN from 'vxe-pc-ui/lib/language/zh-CN';

// 导入格式化器扩展函数
import { extendsDefaultFormatter } from './extends';

const preference = usePreferences();

const localMap = {
  'zh-CN': zhCN,
  'en-US': enUS,
};
// 注册所有需要的组件到同一个VxeUI实例
VxeUI.component(VxeButton);
VxeUI.component(VxeCheckbox);
VxeUI.component(VxeIcon);
VxeUI.component(VxeInput);
VxeUI.component(VxeLoading);
VxeUI.component(VxeModal);
VxeUI.component(VxeNumberInput);
VxeUI.component(VxePager);
VxeUI.component(VxeRadioGroup);
VxeUI.component(VxeSelect);
VxeUI.component(VxeTooltip);
VxeUI.component(VxeUpload);
VxeUI.use(VxeUIPluginRenderElement);
VxeUI.component(VxeTable);
VxeUI.component(VxeColumn);
VxeUI.component(VxeColgroup);
VxeUI.component(VxeGrid);
VxeUI.component(VxeToolbar);
VxeUIPluginRenderElement.component(ElInput);
VxeUIPluginRenderElement.component(ElInputNumber);
VxeUIPluginRenderElement.component(ElSelect);
VxeUIPluginRenderElement.component(ElCascader);
VxeUIPluginRenderElement.component(ElDatePicker);
VxeUIPluginRenderElement.component(ElTimeSelect);
VxeUIPluginRenderElement.component(ElSwitch);

// 注册全局格式化器
extendsDefaultFormatter(VxeUI);

VxeUI.setConfig({
  // size: null, // 全局尺寸
  // zIndex: 999, // 全局 zIndex 起始值，如果项目的的 z-index 样式值过大时就需要跟随设置更大，避免被遮挡；新版本可以使用 dom-zindex 共享配置
  // version: 1, // 版本号，对于某些带数据缓存的功能有用到，上升版本号可以用于重置数据

  // export: {
  //   types: {}
  // },
  grid: {
    // size: null,
    // zoomConfig: {
    //   escRestore: true
    // },
    formConfig: {
      enabled: true,
    },
    pagerConfig: {
      enabled: true,
      // perfect: false
    },
    toolbarConfig: {
      enabled: true,
      // perfect: false
    },
    proxyConfig: {
      enabled: true,
      autoLoad: true,
      showLoading: true,
      showResponseMsg: true,
      showActionMsg: true,
      response: {
        list: null,
        result: 'result',
        total: 'page.total',
        message: 'message',
      },
      // beforeItem: null,
      // beforeColumn: null,
      // beforeQuery: null,
      // afterQuery: null,
      // beforeDelete: null,
      // afterDelete: null,
      // beforeSave: null,
      // afterSave: null
    },
  },
  toolbar: {
    // size: null,
    // import: {
    //   mode: 'covering'
    // },
    // export: {
    //   types: ['csv', 'html', 'xml', 'txt']
    // },
    // buttons: []
  },
});
watch(
  [() => preference.theme.value, () => preference.locale.value],
  ([theme, locale]) => {
    VxeUI.setTheme(theme === 'dark' ? 'dark' : 'light');
    VxeUI.setI18n(locale, localMap[locale]);
    VxeUI.setLanguage(locale);
  },
  {
    immediate: true,
  },
);
